Contents
  1. 1. Introduction
  2. 2. String
  3. 3. StringBuffer
  4. 4. StringBuilder
  5. 5. 总结
  6. 6. 参考链接
  7. 7. OVER

Introduction

如题,本文将要介绍StringStringBuffer以及StringBuilder的区别。首先要申明的是,他们的区别不大。

String

String是一个不变对象(immutable[一旦创建不可以改变])
创建的String对象被保存在常量池中(Constant String Pool)
像String这样的不可变对象都是现成安全的

1
2
3
4
5
6
String  demo = " hello " ;
// “hello”对象存储在常量池,该对象不可修改


demo="Bye" ;//新的String对象“Bye”也保存在常量池中,demo指向这个新建的变量
// String对象“hello”在常量池中仍然存在,他的值没有被覆盖,只是我们丢失了指向他的变量罢了。

StringBuffer

StringBuffer是可变的意思是:可以改变该对象的值。
StringBuffer对象呗保存在堆中(heap)
每个StringBuffer的方法都是synchronized
StringBuffer是线程安全的

1
2
3
4
StringBuffer demo1 = new StringBuffer("Hello") ;
// 以上对象被保存在堆中,能够修改他的值。
demo1=new StringBuffer("Bye");
// 上述语句修改了demo1的值。demo1中的原值“Hello”被替换

StringBuilder

StringBuilder基本和StringBuffer相同。主要区别就是StringBuilder是不是线程安全的;正由于他不是是线程安全的,所以速度要比StringBuffer要快。

总结

String StringBuffer StringBuilder
存储区域 常量池
是否可修改 不可修改 可修改 可修改
线程安全 安全 安全 不安全
表现

参考链接

原文见链接http://javahungry.blogspot.com/2013/06/difference-between-string-stringbuilder.html

OVER

Contents
  1. 1. Introduction
  2. 2. String
  3. 3. StringBuffer
  4. 4. StringBuilder
  5. 5. 总结
  6. 6. 参考链接
  7. 7. OVER